package com.one.config;

import com.one.constant.RabbitMQConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName: RabbitMQDirectConfig
 * @Auther: yph
 * @Date: 2022/1/3 14:15
 * @Description: RabbitMQ直连模式自动配置类
 */
@Configuration
public class RabbitMQDirectConfig {

    /**
     * @Author: yph
     * @Date: 2022/1/3 14:15
     * @return:
     * @Description: 配置直连队列，要设置消息持久化
     */
    @Bean
    public Queue directQueue() {
        //创建一个Queue对象
        // 创建对象时构造函数中的参数
        //1、name : 当前队列的名字， "必传"
        //2、durable : 是否持久化消息，如果是true，自动持久好到磁盘，重启服务，队列中的消息仍然
        //3、exclusive : 是否是排他队列，默认是false，如果是true ，只有创建当前队列的连接才有权限使用，当连接断开之后，队列自动删除
        //4、autoDelete : 是否是自动删除队列，默认是false ，如果是true ，一旦没有生产者，或者消费者使用该队列，就会自动删除
        return new Queue(RabbitMQConstant.RABBITMQ_DIRECT_QUEUE_PRODUCT, true);
    }

    /**
     * @Author: yph
     * @Date: 2022/1/3 14:27
     * @return:
     * @Description: 配置直连交换机
     */
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange(RabbitMQConstant.RABBITMQ_DIRECT_EXCHANGE_PRODUCT);
    }

    /**
     * @Author: yph
     * @Date: 2022/1/3 14:30
     * @return:
     * @Description: 配置直连交换机和直连队列的绑定路由键
     */
    @Bean
    public Binding directBinding() {
        return BindingBuilder.bind(directQueue()).to(directExchange()).with(RabbitMQConstant.RABBITMQ_DIRECT_ROUTING_PRODUCT);
    }


}
